This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.
Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter. # First part ## data filter and normalization
source("./tianfengRwrappers.R")
冠状动脉
dataset from Nat. Med.
human_coronary_countmatrix <- read.csv("GSE131778_human_coronary_scRNAseq.txt", sep = "\t")
func <- function(s) {
paste0(strsplit(s, ".", fixed = T)[[1]][2], "_", strsplit(s, ".", fixed = T)[[1]][1])
}
colnames(human_coronary_countmatrix) <- lapply(colnames(human_coronary_countmatrix), func) # 拆分样本
human_coronary <- CreateSeuratObject(counts = human_coronary_countmatrix,
project = "human_coronary", min.cells = 10, min.features = 300) %>%
PercentageFeatureSet(pattern = "^MT-", col.name = "percent.mt") %>%
subset(subset = nFeature_RNA > 600 & nFeature_RNA < 6000 & nCount_RNA > 1000 & nCount_RNA < 30000) %>%
SCTransform(vars.to.regress = "percent.mt", verbose = F) %>%
RunPCA() %>% FindNeighbors(dims = 1:20) %>%
RunUMAP(dims = 1:20) %>%
FindClusters(resolution = 0.1)
rm(human_coronary_countmatrix)
颈动脉斑块 CA dataset1
# 批量读取计数矩阵
# 需要把行名的gene删掉,用vscode修改
count_mats <- list.files("./CA_GSE155512")
count_mats <- count_mats[count_mats != "sampleinfo.txt"]
allList <- lapply(count_mats, function(folder) {
CreateSeuratObject(
counts = read.csv(paste0("./CA_GSE155512/", folder), sep = "\t"),
project = folder, min.cells = 10, min.features = 300
)
})
# 合并seurat对象
CA_dataset1 <- merge(allList[[1]],
y = allList[-1], add.cell.ids = count_mats,
project = "CA_dataset1"
)
rm(allList)
CA_dataset1 <- PercentageFeatureSet(CA_dataset1, pattern = "^MT-", col.name = "percent.mt") %>%
subset(subset = nFeature_RNA > 600 & nFeature_RNA < 6000 & nCount_RNA > 1000 & nCount_RNA < 30000) %>%
SCTransform(vars.to.regress = "percent.mt", verbose = F) %>%
RunPCA() %>% FindNeighbors(dims = 1:20) %>%
RunUMAP(dims = 1:20) %>%
FindClusters(resolution = 0.1)
颈动脉斑块 CA dataset2
CA_dataset2 <- CreateSeuratObject(Read10X("./CA_GSE159677/"), names.field = 2, names.delim = "-",
project = "CA_dataset2", min.cells = 10, min.features = 300) %>%
PercentageFeatureSet(pattern = "^MT-", col.name = "percent.mt") %>%
subset(subset = nFeature_RNA > 600 & nFeature_RNA < 6000 & nCount_RNA > 1000 & nCount_RNA < 30000) %>%
SCTransform(vars.to.regress = "percent.mt", verbose = F) %>%
RunPCA() %>% FindNeighbors(dims = 1:20) %>%
RunUMAP(dims = 1:20) %>%
FindClusters(resolution = 0.1)
保存结果
saveRDS(human_coronary,"human_coronary.rds")
saveRDS(CA_dataset1,"CA_dataset1.rds")
saveRDS(CA_dataset2,"CA_dataset2.rds") #已经经过分组处理了
Idents(CA_dataset2) <- CA_dataset2$conditions
AC <- subset(CA_dataset2, idents = "AC")
PA <- subset(CA_dataset2, idents = "PA")
AC <- AC %>% RunPCA() %>% FindNeighbors(dims = 1:20) %>%
RunUMAP(dims = 1:20) %>%
FindClusters(resolution = 0.1)
PA <- PA %>% RunPCA() %>% FindNeighbors(dims = 1:20) %>%
RunUMAP(dims = 1:20,seed.use = 20) %>%
FindClusters(resolution = 0.1)
AC <- AC %>% RunUMAP(dims = 1:20,seed.use = 20) %>%
FindClusters(resolution = 0.1)
SMC <- SMC %>% FindNeighbors(dims = 1:20) %>% FindClusters(resolution = 0.2)
Computing nearest neighbor graph
Computing SNN
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 3057
Number of edges: 98364
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9273
Number of communities: 5
Elapsed time: 0 seconds
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ3RybCtTaGlmdCtFbnRlciouIAojIEZpcnN0IHBhcnQKIyMgZGF0YSBmaWx0ZXIgYW5kIG5vcm1hbGl6YXRpb24KCmBgYHtyfQpzb3VyY2UoIi4vdGlhbmZlbmdSd3JhcHBlcnMuUiIpCmBgYAoKIyDlhqDnirbliqjohIkKIyMgZGF0YXNldCBmcm9tICpOYXQuIE1lZC4qCmBgYHtyfQpodW1hbl9jb3JvbmFyeV9jb3VudG1hdHJpeCA8LSByZWFkLmNzdigiR1NFMTMxNzc4X2h1bWFuX2Nvcm9uYXJ5X3NjUk5Bc2VxLnR4dCIsIHNlcCA9ICJcdCIpCmZ1bmMgPC0gZnVuY3Rpb24ocykgewogIHBhc3RlMChzdHJzcGxpdChzLCAiLiIsIGZpeGVkID0gVClbWzFdXVsyXSwgIl8iLCBzdHJzcGxpdChzLCAiLiIsIGZpeGVkID0gVClbWzFdXVsxXSkKfQpjb2xuYW1lcyhodW1hbl9jb3JvbmFyeV9jb3VudG1hdHJpeCkgPC0gbGFwcGx5KGNvbG5hbWVzKGh1bWFuX2Nvcm9uYXJ5X2NvdW50bWF0cml4KSwgZnVuYykgIyDmi4bliIbmoLfmnKwKYGBgCgpgYGB7cn0KaHVtYW5fY29yb25hcnkgPC0gQ3JlYXRlU2V1cmF0T2JqZWN0KGNvdW50cyA9IGh1bWFuX2Nvcm9uYXJ5X2NvdW50bWF0cml4LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QgPSAiaHVtYW5fY29yb25hcnkiLCBtaW4uY2VsbHMgPSAxMCwgbWluLmZlYXR1cmVzID0gMzAwKSAlPiUgCiAgICBQZXJjZW50YWdlRmVhdHVyZVNldChwYXR0ZXJuID0gIl5NVC0iLCBjb2wubmFtZSA9ICJwZXJjZW50Lm10IikgJT4lCiAgICBzdWJzZXQoc3Vic2V0ID0gbkZlYXR1cmVfUk5BID4gNjAwICYgbkZlYXR1cmVfUk5BIDwgNjAwMCAmIG5Db3VudF9STkEgPiAxMDAwICYgIG5Db3VudF9STkEgPCAzMDAwMCkgJT4lCiAgICBTQ1RyYW5zZm9ybSh2YXJzLnRvLnJlZ3Jlc3MgPSAicGVyY2VudC5tdCIsIHZlcmJvc2UgPSBGKSAlPiUgCiAgICBSdW5QQ0EoKSAlPiUgRmluZE5laWdoYm9ycyhkaW1zID0gMToyMCkgJT4lIAogICAgUnVuVU1BUChkaW1zID0gMToyMCkgJT4lIAogICAgRmluZENsdXN0ZXJzKHJlc29sdXRpb24gPSAwLjEpCnJtKGh1bWFuX2Nvcm9uYXJ5X2NvdW50bWF0cml4KQpgYGAKCgojIOmiiOWKqOiEieaWkeWdlyBDQSBkYXRhc2V0MQpgYGB7cn0KIyDmibnph4/or7vlj5borqHmlbDnn6npmLUKIyDpnIDopoHmiorooYzlkI3nmoRnZW5l5Yig5o6J77yM55SodnNjb2Rl5L+u5pS5CmNvdW50X21hdHMgPC0gbGlzdC5maWxlcygiLi9DQV9HU0UxNTU1MTIiKQpjb3VudF9tYXRzIDwtIGNvdW50X21hdHNbY291bnRfbWF0cyAhPSAic2FtcGxlaW5mby50eHQiXQphbGxMaXN0IDwtIGxhcHBseShjb3VudF9tYXRzLCBmdW5jdGlvbihmb2xkZXIpIHsKICBDcmVhdGVTZXVyYXRPYmplY3QoCiAgICBjb3VudHMgPSByZWFkLmNzdihwYXN0ZTAoIi4vQ0FfR1NFMTU1NTEyLyIsIGZvbGRlciksIHNlcCA9ICJcdCIpLAogICAgcHJvamVjdCA9IGZvbGRlciwgbWluLmNlbGxzID0gMTAsIG1pbi5mZWF0dXJlcyA9IDMwMAogICkKfSkKIyDlkIjlubZzZXVyYXTlr7nosaEKQ0FfZGF0YXNldDEgPC0gbWVyZ2UoYWxsTGlzdFtbMV1dLAogIHkgPSBhbGxMaXN0Wy0xXSwgYWRkLmNlbGwuaWRzID0gY291bnRfbWF0cywKICBwcm9qZWN0ID0gIkNBX2RhdGFzZXQxIgopCnJtKGFsbExpc3QpCgpDQV9kYXRhc2V0MSA8LSBQZXJjZW50YWdlRmVhdHVyZVNldChDQV9kYXRhc2V0MSwgcGF0dGVybiA9ICJeTVQtIiwgY29sLm5hbWUgPSAicGVyY2VudC5tdCIpICU+JQogICAgc3Vic2V0KHN1YnNldCA9IG5GZWF0dXJlX1JOQSA+IDYwMCAmIG5GZWF0dXJlX1JOQSA8IDYwMDAgJiBuQ291bnRfUk5BID4gMTAwMCAmICBuQ291bnRfUk5BIDwgMzAwMDApICU+JQogICAgU0NUcmFuc2Zvcm0odmFycy50by5yZWdyZXNzID0gInBlcmNlbnQubXQiLCB2ZXJib3NlID0gRikgJT4lIAogICAgUnVuUENBKCkgJT4lIEZpbmROZWlnaGJvcnMoZGltcyA9IDE6MjApICU+JSAKICAgIFJ1blVNQVAoZGltcyA9IDE6MjApICU+JSAKICAgIEZpbmRDbHVzdGVycyhyZXNvbHV0aW9uID0gMC4xKQoKYGBgCgoKCiMg6aKI5Yqo6ISJ5paR5Z2XIENBIGRhdGFzZXQyCmBgYHtyfQpDQV9kYXRhc2V0MiA8LSBDcmVhdGVTZXVyYXRPYmplY3QoUmVhZDEwWCgiLi9DQV9HU0UxNTk2NzcvIiksIG5hbWVzLmZpZWxkID0gMiwgbmFtZXMuZGVsaW0gPSAiLSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCA9ICJDQV9kYXRhc2V0MiIsIG1pbi5jZWxscyA9IDEwLCBtaW4uZmVhdHVyZXMgPSAzMDApICU+JSAKICBQZXJjZW50YWdlRmVhdHVyZVNldChwYXR0ZXJuID0gIl5NVC0iLCBjb2wubmFtZSA9ICJwZXJjZW50Lm10IikgJT4lCiAgc3Vic2V0KHN1YnNldCA9IG5GZWF0dXJlX1JOQSA+IDYwMCAmIG5GZWF0dXJlX1JOQSA8IDYwMDAgJiBuQ291bnRfUk5BID4gMTAwMCAmICBuQ291bnRfUk5BIDwgMzAwMDApICU+JQogIFNDVHJhbnNmb3JtKHZhcnMudG8ucmVncmVzcyA9ICJwZXJjZW50Lm10IiwgdmVyYm9zZSA9IEYpICU+JSAKICBSdW5QQ0EoKSAlPiUgRmluZE5laWdoYm9ycyhkaW1zID0gMToyMCkgJT4lIAogIFJ1blVNQVAoZGltcyA9IDE6MjApICU+JSAKICBGaW5kQ2x1c3RlcnMocmVzb2x1dGlvbiA9IDAuMSkKYGBgCgoKIyDmt7vliqBtZXRhZGF0YSBzYW1wbGVz5a2Y5YKo5a6M5pW05L+h5oGv77yMY29uZGl0aW9uc+aMieWMuuWfn+WIhu+8jGdyb3Vwc+aMieeXheS+i+WIhgpgYGB7cn0KSWRlbnRzKGh1bWFuX2Nvcm9uYXJ5KSA8LSBodW1hbl9jb3JvbmFyeSRvcmlnLmlkZW50CklkZW50cyhodW1hbl9jb3JvbmFyeSkgPC0gYygiMSIsIjEiLCIyIiwiMiIsIjMiLCIzIiwiNCIsIjQiKQpodW1hbl9jb3JvbmFyeSRzYW1wbGVzIDwtIElkZW50cyhodW1hbl9jb3JvbmFyeSkKSWRlbnRzKGh1bWFuX2Nvcm9uYXJ5KSA8LSBodW1hbl9jb3JvbmFyeSRzZXVyYXRfY2x1c3RlcnMKCklkZW50cyhDQV9kYXRhc2V0MikgPC0gQ0FfZGF0YXNldDIkb3JpZy5pZGVudApDQV9kYXRhc2V0MiA8LSBSZW5hbWVJZGVudHMoQ0FfZGF0YXNldDIsJzEnID0gJ0FDXzEnLCcyJyA9ICdQQV8xJywnMycgPSAnQUNfMicsJzQnID0gJ1BBXzInLCc1JyA9ICdBQ18zJywnNicgPSAnUEFfMycpClVNQVBQbG90KENBX2RhdGFzZXQyKQoKQ0FfZGF0YXNldDIkc2FtcGxlIDwtIElkZW50cyhDQV9kYXRhc2V0MikKQ0FfZGF0YXNldDIgPC0gUmVuYW1lSWRlbnRzKENBX2RhdGFzZXQyLCdBQ18xJyA9ICdBQycsJ1BBXzEnID0gJ1BBJywnQUNfMic9ICdBQycsJ1BBXzInPSAnUEEnLCdBQ18zJz0gJ0FDJywnUEFfMyc9ICdQQScpCkNBX2RhdGFzZXQyJGNvbmRpdGlvbnMgPC0gSWRlbnRzKENBX2RhdGFzZXQyKQpJZGVudHMoQ0FfZGF0YXNldDIpIDwtIENBX2RhdGFzZXQyJG9yaWcuaWRlbnQKQ0FfZGF0YXNldDIgPC0gUmVuYW1lSWRlbnRzKENBX2RhdGFzZXQyLCAnMScgPSAnc3BfMScsJzInID0gJ3NwXzEnLCczJyA9ICdzcF8yJywnNCcgPSAnc3BfMicsJzUnID0gJ3NwXzMnLCc2JyA9ICdzcF8zJykKQ0FfZGF0YXNldDIkZ3JvdXBzIDwtIElkZW50cyhDQV9kYXRhc2V0MikKSWRlbnRzKENBX2RhdGFzZXQyKSA8LSBDQV9kYXRhc2V0MiRzZXVyYXRfY2x1c3RlcnMKYGBgCgojIOS/neWtmOe7k+aenApgYGB7cn0Kc2F2ZVJEUyhodW1hbl9jb3JvbmFyeSwiaHVtYW5fY29yb25hcnkucmRzIikKc2F2ZVJEUyhDQV9kYXRhc2V0MSwiQ0FfZGF0YXNldDEucmRzIikKc2F2ZVJEUyhDQV9kYXRhc2V0MiwiQ0FfZGF0YXNldDIucmRzIikgI+W3sue7j+e7j+i/h+WIhue7hOWkhOeQhuS6hgpgYGAKCmBgYHtyfQpJZGVudHMoQ0FfZGF0YXNldDIpIDwtIENBX2RhdGFzZXQyJGNvbmRpdGlvbnMKQUMgPC0gc3Vic2V0KENBX2RhdGFzZXQyLCBpZGVudHMgPSAiQUMiKQpQQSA8LSBzdWJzZXQoQ0FfZGF0YXNldDIsIGlkZW50cyA9ICJQQSIpCmBgYAoKYGBge3J9CkFDIDwtIEFDICU+JSBSdW5QQ0EoKSAlPiUgRmluZE5laWdoYm9ycyhkaW1zID0gMToyMCkgJT4lIAogIFJ1blVNQVAoZGltcyA9IDE6MjApICU+JSAKICBGaW5kQ2x1c3RlcnMocmVzb2x1dGlvbiA9IDAuMSkKUEEgPC0gUEEgJT4lIFJ1blBDQSgpICU+JSBGaW5kTmVpZ2hib3JzKGRpbXMgPSAxOjIwKSAlPiUgCiAgUnVuVU1BUChkaW1zID0gMToyMCxzZWVkLnVzZSA9IDIwKSAlPiUgCiAgRmluZENsdXN0ZXJzKHJlc29sdXRpb24gPSAwLjEpCmBgYAoKYGBge3J9CkFDIDwtIEFDICU+JSBSdW5VTUFQKGRpbXMgPSAxOjIwLHNlZWQudXNlID0gMjApICU+JSAKICBGaW5kQ2x1c3RlcnMocmVzb2x1dGlvbiA9IDAuMSkKYGBgCmBgYHtyfQpTTUMgPC0gc3Vic2V0KEFDLGlkZW50cyA9IGMoMSw0KSkKYGBgCgpgYGB7cn0KU01DIDwtIFNNQyAlPiUgRmluZE5laWdoYm9ycyhkaW1zID0gMToyMCkgJT4lIEZpbmRDbHVzdGVycyhyZXNvbHV0aW9uID0gMC4yKQpgYGAKCg==